/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package proyecto1;

import java.util.Hashtable;
import java.util.Observable;

/**
 *
 * @author grupo
 import java.util.Observable;
*/
public class Sucursal extends Observable{
    
    private String id;
    private Hashtable<String,Plan> listaPlanes;  
    private double peso;
    
    /**
     *
     * @param pId
     * @param pPeso
     */
    public Sucursal(String pId, double pPeso)
    {
        setPeso(pPeso);
        setId(pId);
        listaPlanes = new Hashtable<String,Plan>();
    }

    /**
     * @return the id
     */
    public String getId() {
        return id;
    }

    /**
     * @return the peso
     */
    public double getPeso() {
        return peso;
    }

    /**
     * @param id the id to set
     */
    private void setId(String id) {
        this.id = id;
    }

    /**
     * @param peso the peso to set
     */
    private void setPeso(double peso) {
        this.peso = peso;
    }
    
    /**
     *
     * @return
     */
    public int getCantPlanes()
    {
        return this.listaPlanes.size();
    }
    
    /**
     *
     * @return
     */
    public int getPlanesPreventivos()
    {
        int cant = 0;
        for(String key: listaPlanes.keySet())
        {
            if(listaPlanes.get(key).getTipoDePlan() == TipoDePlan.PREVENTIVO)
                cant++;
        }
        return cant;
    }
    
    /**
     *
     * @return
     */
    public int getPlanesCorrectivos()
    {
        return listaPlanes.size()- getPlanesPreventivos();
    }
    
    /**
     *
     * @return
     */
    public double getIndicadorEficacia()
    {
        if(listaPlanes.size() > 0){
            int planesEfectivos = getCantPlanesEfectivos();

            return (double) planesEfectivos/listaPlanes.size()*100;
        }
        else
        {
            return 0;
        }
    }
    
    /**
     *
     * @return
     */
    public double getIndiceEficiencia()
    {
        if(listaPlanes.size() > 0){
            int sum = 0;
            for(String key:listaPlanes.keySet())
            {
                sum += listaPlanes.get(key).getIndiceEficiencia();
            }
            return (double)sum/listaPlanes.size();
        }
        return 0;
    }
    
    /**
     *
     * @return
     */
    public double getIndicePrevision()
    {
        if(listaPlanes.size()>0){
            int planesPreventivos = getPlanesPreventivos();
            int planesCorrectivos = getPlanesCorrectivos();

            return (double) planesPreventivos/planesCorrectivos;
        }else{
            return 0;
        }
    }
    
    /**
     *
     * @return
     */
    public String getIndicePrevisionString()
    {
        if(listaPlanes.size()>0){
            String categoria = "";
            double indice = this.getIndicePrevision();

            if(indice > 0 )
            {
                categoria=  "Alto";
            }else{
                if(indice == 0)
                {
                    categoria= "Medio";
                }else{
                    categoria = "Bajo";
                }
            }
            return indice + " - " +categoria;
        }else{
            return "N/A";
        }
    }
    
    /**
     *
     * @return
     */
    public int getCantPlanesEfectivos()
    {
        int planesPreventivos = 0;
        for(String key: listaPlanes.keySet())
        {
            if(listaPlanes.get(key).isPlanEfectivo())
            {
                planesPreventivos++;
            }
        }
        
        return planesPreventivos;
    }
    
    /**
     *
     * @return
     */
    public int getCantPlanesInfectivos()
    {
        return listaPlanes.size() - getCantPlanesEfectivos();
    }
    
    /**
     *
     * @param pcodigo
     * @param pplan
     */
    public void registarPlan(String pcodigo, Plan pplan){
        if(!listaPlanes.containsKey(pcodigo)){
            listaPlanes.put(pcodigo, pplan);
            setChanged();
            notifyObservers();
        }
    }
    
    /**
     *
     * @param codigo
     * @param plan
     */
    public void desregistarPlan(String codigo, Plan plan)
    {
        if(listaPlanes.containsKey(codigo))
        {
            listaPlanes.remove(codigo,plan);
            setChanged();
            notifyObservers();
        }
    }
    
    /**
     *
     * @param key
     * @return
     */
    public boolean tienePlanRegistrado(String key)
    {
        return listaPlanes.containsKey(key);
    }
}
